import axios from 'axios'
import { ElMessage } from 'element-plus'

// API基础URL配置 - 根据实际后端地址修改
const baseURL = 'http://localhost:8085/api'
console.log('API基础地址:', baseURL)

// 创建axios实例
const request = axios.create({
  baseURL,
  timeout: 10000 // 增加超时时间到10秒
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token')
    console.log('当前token:', token)
    if (token) {
      // 检查token是否已经包含Bearer前缀，避免重复添加
      if (token.startsWith('Bearer ')) {
        config.headers['Authorization'] = token
      } else {
        config.headers['Authorization'] = `Bearer ${token}`
      }
    }
    console.log('请求配置:', {
      url: config.url,
      method: config.method,
      params: config.params,
      data: config.data,
      headers: config.headers
    })
    return config
  },
  error => {
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    const res = response.data
    console.log('响应数据:', {
      url: response.config.url,
      status: response.status,
      data: res
    })
    // 文件下载请求跳过状态校验
    if (response.config.isDownload) return response

    // 支持字符串和数字类型的code，以及success字段
    // if (res.code !== 200 && res.code !== '200' && res.success !== true) {
    //   ElMessage.error(res.msg || res.message || '请求失败')
    //   return Promise.reject(new Error(res.msg || res.message || '请求失败'))
    // }
    return res
  },
  error => {
    console.error('响应错误:', error)

    // 网络错误处理
    if (!error.response) {
      if (error.message.includes('timeout')) {
        ElMessage.error('请求超时，请检查后端服务是否启动')
      } else if (error.message.includes('Network Error')) {
        ElMessage.error('网络错误，请检查您的网络连接以及后端服务是否正常')
      } else {
        ElMessage.error(`请求失败: ${error.message}`)
      }
      return Promise.reject(error)
    }

    // HTTP状态码错误处理
    let message = error.message || '请求失败'
    console.log('错误详情:', error.response)

    if (error.response) {
      switch (error.response.status) {
        case 401:
          message = '未授权，请重新登录'
          // 处理登出逻辑
          localStorage.removeItem('token')
          localStorage.removeItem('userInfo')
          window.location.href = '/login'
          break
        case 403:
          message = '拒绝访问，请检查token是否正确'
          break
        case 404:
          message = '请求资源不存在，请检查API地址是否正确'
          break
        case 500:
          message = '服务器内部错误，请联系管理员'
          break
        default:
          message = `请求失败: ${error.response.status}`
      }
    }

    ElMessage.error(message)
    return Promise.reject(error)
  }
)

export default request